import { TaskManager } from '../../utils/taskManager.js'
import { TASK_PRIORITY, TASK_STATUS } from '../../utils/constants.js'

Page({
  data: {
    task: null, // 任务数据
    isEdit: false, // 是否为编辑模式
    isNew: false, // 是否为新建任务
    loading: false, // 加载状态
    
    // 表单数据
    formData: {
      title: '',
      note: '',
      priority: 2 // 默认中等优先级
    },
    
    // 优先级选项
    priorityOptions: [
      { value: 1, label: '高优先级', color: '#ff4757', icon: '🔥' },
      { value: 2, label: '中等优先级', color: '#ffa502', icon: '⚡' },
      { value: 3, label: '低优先级', color: '#2ed573', icon: '🌱' }
    ],
    
    // 表单验证
    errors: {
      title: ''
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('任务详情页面加载', options)
    
    if (options.id) {
      // 查看或编辑现有任务
      this.loadTask(options.id)
      this.setData({ isEdit: options.mode === 'edit' })
    } else {
      // 新建任务
      this.setData({ 
        isNew: true,
        isEdit: true,
        task: {
          id: '',
          title: '',
          note: '',
          priority: 2,
          status: TASK_STATUS.PENDING,
          createTime: Date.now(),
          updateTime: Date.now()
        }
      })
      this.initNewTask()
    }
    
    // 设置导航栏标题
    this.updateNavigationTitle()
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 页面显示时的逻辑
  },

  /**
   * 更新导航栏标题
   */
  updateNavigationTitle() {
    let title = '任务详情'
    
    if (this.data.isNew) {
      title = '创建任务'
    } else if (this.data.isEdit) {
      title = '编辑任务'
    }
    
    wx.setNavigationBarTitle({ title })
  },

  /**
   * 加载任务数据
   */
  loadTask(taskId) {
    this.setData({ loading: true })
    
    try {
      const result = TaskManager.getTaskById(taskId)
      
      if (result.success) {
        const task = result.data
        this.setData({
          task: task,
          formData: {
            title: task.title,
            note: task.note || '',
            priority: task.priority
          },
          loading: false
        })
        
        console.log('任务加载成功:', task)
      } else {
        console.error('任务加载失败:', result.message)
        this.setData({ loading: false })
        wx.showToast({
          title: result.message,
          icon: 'error'
        })
        
        // 延迟返回上一页
        setTimeout(() => {
          wx.navigateBack()
        }, 1500)
      }
    } catch (error) {
      console.error('加载任务数据失败:', error)
      this.setData({ loading: false })
      wx.showToast({
        title: '加载失败',
        icon: 'error'
      })
    }
  },

  /**
   * 初始化新任务
   */
  initNewTask() {
    this.setData({
      formData: {
        title: '',
        note: '',
        priority: 2
      }
    })
  },

  /**
   * 切换编辑模式
   */
  toggleEditMode() {
    const isEdit = !this.data.isEdit
    this.setData({ isEdit })
    this.updateNavigationTitle()
    
    if (isEdit) {
      wx.showToast({
        title: '进入编辑模式',
        icon: 'none'
      })
    }
  },

  /**
   * 表单输入处理
   */
  onTitleInput(e) {
    const title = e.detail.value
    const trimmedTitle = title.trim()
    
    // 清理字符计数，确保准确性
    const actualLength = title.length
    const trimmedLength = trimmedTitle.length
    
    console.log('标题输入:', {
      原始输入: title,
      原始长度: actualLength,
      清理后: trimmedTitle,
      清理后长度: trimmedLength,
      光标位置: e.detail.cursor
    })
    
    // 实时验证
    let titleError = ''
    if (actualLength > 100) {
      titleError = '任务标题不能超过100个字符'
    } else if (trimmedLength === 0 && actualLength > 0) {
      titleError = '任务标题不能只包含空格'
    }
    
    this.setData({
      'formData.title': title,
      'errors.title': titleError
    })
    
    // 如果超过限制，给出提示
    if (actualLength > 100) {
      wx.vibrateShort()
    }
  },

  onNoteInput(e) {
    const note = e.detail.value
    const actualLength = note.length
    
    console.log('备注输入:', {
      原始输入: note,
      原始长度: actualLength
    })
    
    this.setData({
      'formData.note': note
    })
    
    // 如果超过限制，给出提示
    if (actualLength > 500) {
      wx.vibrateShort()
    }
  },

  onPriorityChange(e) {
    const priority = parseInt(e.detail.value) + 1 // picker返回的是索引
    this.setData({
      'formData.priority': priority
    })
  },

  /**
   * 表单验证
   */
  validateForm() {
    const { title } = this.data.formData
    const errors = {}
    
    if (!title || title.trim().length === 0) {
      errors.title = '请输入任务标题'
    } else if (title.trim().length > 100) {
      errors.title = '任务标题不能超过100个字符'
    }
    
    this.setData({ errors })
    return Object.keys(errors).length === 0
  },

  /**
   * 保存任务
   */
  saveTask() {
    if (!this.validateForm()) {
      wx.showToast({
        title: this.data.errors.title || '请检查输入内容',
        icon: 'none'
      })
      return
    }
    
    wx.showLoading({ title: '保存中...' })
    
    try {
      const { formData, task, isNew } = this.data
      
      const taskData = {
        title: formData.title.trim(),
        note: formData.note.trim(),
        priority: formData.priority
      }
      
      let result
      
      if (isNew) {
        // 创建新任务
        result = TaskManager.createTask(taskData.title, taskData.note, taskData.priority)
      } else {
        // 更新现有任务
        result = TaskManager.updateTask(task.id, taskData)
      }
      
      wx.hideLoading()
      
      if (result.success) {
        wx.showToast({
          title: result.message,
          icon: 'success'
        })
        
        // 延迟返回上一页
        setTimeout(() => {
          wx.navigateBack()
        }, 1500)
      } else {
        wx.showToast({
          title: result.message,
          icon: 'error'
        })
      }
    } catch (error) {
      wx.hideLoading()
      console.error('保存任务失败:', error)
      wx.showToast({
        title: '保存失败',
        icon: 'error'
      })
    }
  },

  /**
   * 取消编辑
   */
  cancelEdit() {
    if (this.data.isNew) {
      // 新建任务时取消，直接返回
      wx.navigateBack()
      return
    }
    
    // 编辑现有任务时，恢复原始数据
    const { task } = this.data
    this.setData({
      isEdit: false,
      formData: {
        title: task.title,
        note: task.note || '',
        priority: task.priority
      },
      errors: {
        title: ''
      }
    })
    
    this.updateNavigationTitle()
  },

  /**
   * 删除任务
   */
  deleteTask() {
    if (this.data.isNew) return
    
    const { task } = this.data
    
    wx.showModal({
      title: '确认删除',
      content: `确定要删除任务"${task.title}"吗？`,
      confirmText: '删除',
      confirmColor: '#ff4757',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({ title: '删除中...' })
          
          const result = TaskManager.deleteTask(task.id)
          wx.hideLoading()
          
          if (result.success) {
            wx.showToast({
              title: result.message,
              icon: 'success'
            })
            
            setTimeout(() => {
              wx.navigateBack()
            }, 1500)
          } else {
            wx.showToast({
              title: result.message,
              icon: 'error'
            })
          }
        }
      }
    })
  },

  /**
   * 切换任务完成状态
   */
  toggleTaskStatus() {
    if (this.data.isNew) return
    
    const { task } = this.data
    wx.showLoading({ title: '处理中...' })
    
    let result
    if (task.status === TASK_STATUS.COMPLETED) {
      result = TaskManager.uncompleteTask(task.id)
    } else {
      result = TaskManager.completeTask(task.id)
    }
    
    wx.hideLoading()
    
    if (result.success) {
      wx.showToast({
        title: result.message,
        icon: 'success'
      })
      
      // 更新任务状态
      this.setData({
        'task.status': result.data.status,
        'task.updateTime': result.data.updateTime,
        'task.completeTime': result.data.completeTime
      })
      
      wx.vibrateShort()
    } else {
      wx.showToast({
        title: result.message,
        icon: 'error'
      })
    }
  },

  /**
   * 分享任务
   */
  shareTask() {
    if (this.data.isNew) return
    
    const { task } = this.data
    const priorityText = this.data.priorityOptions.find(p => p.value === task.priority)?.label || '中等优先级'
    
    wx.showShareMenu({
      withShareTicket: true,
      menus: ['shareAppMessage', 'shareTimeline']
    })
    
    wx.showToast({
      title: '准备分享任务',
      icon: 'none'
    })
  },

  /**
   * 页面分享
   */
  onShareAppMessage() {
    const { task } = this.data
    
    if (!task || this.data.isNew) {
      return {
        title: 'TodoList - 高效的任务管理工具',
        path: '/pages/index/index'
      }
    }
    
    return {
      title: `任务：${task.title}`,
      path: `/pages/detail/detail?id=${task.id}`,
      imageUrl: '/images/share-task.png' // 如果有分享图片的话
    }
  },

  /**
   * 调试输入框状态
   */
  debugInputState() {
    const { formData } = this.data
    const debugInfo = {
      标题原始值: formData.title,
      标题长度: formData.title.length,
      标题字符码: formData.title.split('').map(char => char.charCodeAt(0)),
      备注原始值: formData.note,
      备注长度: formData.note.length,
      页面状态: {
        isEdit: this.data.isEdit,
        isNew: this.data.isNew,
        loading: this.data.loading
      }
    }
    
    console.log('输入框调试信息:', debugInfo)
    
    // 显示调试信息
    wx.showModal({
      title: '调试信息',
      content: `标题: "${formData.title}"\n长度: ${formData.title.length}\n备注长度: ${formData.note.length}`,
      showCancel: false
    })
  }
}) 